/*
 * Copyright (c) 2018-2999 湖南洛云网络科技有限公司 All rights reserved.
 *
 * https://www.gz-yami.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.shop.bean.model.Category;

import java.util.List;

/**
 * 商品分类
 *
 * @author yami
 */
public interface CategoryService extends IService<Category> {

    /**
     * 保存分类、品牌、参数
     *
     * @param category 分类信息
     */
    void saveCategroy(Category category);

    /**
     * 修改分类、品牌、参数
     *
     * @param category 分类信息
     */
    void updateCategroy(Category category);

    /**
     * 删除分类、品牌、参数 以及分类对应的图片
     *
     * @param category 分类信息
     */
    void deleteCategroy(Category category);

    /**
     * 通过分类id和店铺id获取分类信息
     *
     * @param categoryId 分类ID
     * @param shopId     店铺ID
     * @return 分类信息
     */
    Category getCategoryByCategoryIdAndShopId(Long categoryId, Long shopId);

    /**
     * 根据店铺id和顶级分类id，获取分类
     *
     * @param parentId 顶级分类id
     * @param shopId   店铺id
     * @param dbLang   当前选择语言
     * @return 分类信息列表
     */
    List<Category> listByParentIdAndShopId(Long parentId, Long shopId, Integer dbLang);

    /**
     * 根据店铺id获取分类
     *
     * @param shopId 店铺id
     * @return 分类信息列表
     */
    List<Category> listByShopId(Long shopId);

    /**
     * 根据分类ID获取该分类的父分类ID
     *
     * @param parentId 分类ID
     * @return 父分类ID
     */
    Long getParentCategoryByParentId(Long parentId);

    /**
     * 通过顶级id和当前选择语言删除缓存
     *
     * @param parentId
     * @param shopId
     * @param lang
     */
    void removeCacheByParentIdAndLang(Long parentId, Long shopId, Integer lang);

    /**
     * 根据分类查找条件参数查找分类列表
     *
     * @param category 分类查找条件参数
     * @return 分类列表
     */
    List<Category> categoryList(Category category);

    /**
     * 根据语言获取分类
     *
     * @param lang     当前选择语言
     * @param maxGrade 最大级别
     * @param parentId 父分类ID
     * @param status   状态
     * @param shopId   店铺ID
     * @return 分类信息列表
     */
    List<Category> listByLang(Integer lang, Integer maxGrade, Long parentId, Integer status, Long shopId);

    /**
     * 根据名称查找名称相同的分类数量，如果设置了category_id参数，则等于category_id等于该参数的分类不参与运算
     *
     * @param category 分类查找参数
     * @return 相同名称的数量
     */
    Integer getCategoryName(Category category);

    /**
     * 根据分类ID获取分类
     *
     * @param categoryId 分类ID
     * @return 分类信息
     */
    Category getCategoryByCategoryId(Long categoryId);

    /**
     * 根据等级,店铺id,状态获取分类列表
     *
     * @param lang   当前选择语言
     * @param grade  最大级别
     * @param status 状态
     * @param shopId 店铺id
     * @return 分类信息列表
     */
    List<Category> listByGrade(Integer lang, Integer grade, Integer status, Long shopId);

    /**
     * 根据父类id查询子类id集合
     *
     * @param parentId 父类id
     * @return 子类id集合
     */
    List<Long> selectListCategoryIdByParentId(Long parentId);

    /**
     * 根据父类id集合查询子类id集合
     *
     * @param parentIds parentIds
     * @return List<Long>
     */
    List<Long> selectListCategoryIdByParentIds(List<Long> parentIds);
}
